import type { Ref, ComputedRef } from 'vue';
import type { BasicTableProps, TableActionType } from '../types/table';
import { provide, inject } from 'vue';

// 创建一个唯一的 Symbol 作为上下文的键值
const key = Symbol('s-table');

// 定义表格上下文实例的类型
type Instance = TableActionType & {
  wrapRef: Ref<Nullable<HTMLElement>>;
  getBindValues: ComputedRef<Recordable>;
  isShowTable: any;
};

// 定义返回的表格上下文实例的类型（省略了 getBindValues 属性）
type RetInstance = Omit<Instance, 'getBindValues'> & {
  getBindValues: ComputedRef<BasicTableProps>;
};

// 创建表格上下文
export function createTableContext(instance: Instance) {
  provide(key, instance);
}

// 使用表格上下文
export function useTableContext(): RetInstance {
  return inject(key) as RetInstance;
}
